package mop.model.task;

import java.util.List;

import mop.model.ModelInterface;
import mop.model.project.ProjectInterface;
import mop.model.task.field.FieldInterface;
import mop.model.task.state.StateInterface;
import mop.model.task.tasktype.TaskTypeInterface;
import mop.model.user.UserInterface;

/**
 * Interface for a task
 * @author Mop Team 7
 */
public interface TaskInterface extends ModelInterface{
		
	/**
	 * Inspector for the schedule attribute
	 * @return schedule
	 */
	public ScheduleInterface getSchedule();
	
	/**
	 * User inspector
	 * @return	user
	 */
	public UserInterface getUser();
	
	/**
	 * Inspector for State
	 * @return this.status
	 */
	public StateInterface getStatus();
	
	/**
	 * Project inspector
	 * @return project
	 */
	public ProjectInterface getProject();
	
	/**
	 * Type inspector
	 * @return type
	 */
	public TaskTypeInterface getTaskType();
	
	/**
	 * Get all direct and indirect parents (depending on this task)
	 * @return List with tasks depending directly or indirectly on this task
	 */
	public List<TaskInterface> getAllParentList();
	
	/**
	 * Get all direct parents (depending on this task)
	 * @return List with tasks depending directly on this task
	 */
	public List<TaskInterface> getParentList();
	
	/**
	 * Get dependent tasks
	 * @return	List with tasks this task depends on
	 */
	public List<TaskInterface> getDependencyList();
	
	/**
	 * Get all fields
	 * @return	List with fields of this task
	 */
	public List<FieldInterface> getFieldList();
}
